package com.thought.wxsession.utils.message;

import lombok.Data;

import java.math.BigDecimal;

/**
 * @author zhuqinyue
 */
@Data
public class RabbitDelayMqMessage {

    /**
     * 消息主体
     */
    private Object body;

    /**
     * 延迟时间
     */
    private Integer delayTimes;

    /**
     * 交换机名称
     */
    private String exchange;

    /**
     * 路由键（队列名称）
     */
    private String routingKey;

    /**
     * @param exchange   交换机名称
     * @param routingKey 路由键（队列名称）
     * @param message    信息主体
     * @param delayTimes 延迟消费时间（单位：毫秒）
     */
    public RabbitDelayMqMessage(String exchange, String routingKey, Object message, Integer delayTimes) {
        this.exchange = exchange;
        this.routingKey = routingKey;
        this.body = message;
        this.delayTimes = delayTimes;
    }

    /**
     * @param exchange   交换机名称
     * @param routingKey 路由键（队列名称）
     * @param message    信息主体
     * @param delayTimes 延迟消费时间（单位：毫秒）
     */
    public RabbitDelayMqMessage(String exchange, String routingKey, Object message, Long delayTimes) {
        this.exchange = exchange;
        this.routingKey = routingKey;
        this.body = message;
        this.delayTimes = delayTimes.intValue();
    }

    /**
     * @param exchange   交换机名称
     * @param routingKey 路由键（队列名称）
     * @param message    信息主体
     * @param executeTime 指定消费时间（单位：毫秒）
     */
    public RabbitDelayMqMessage(String exchange, String routingKey, long executeTime, Object message) {
        this.exchange = exchange;
        this.routingKey = routingKey;
        this.body = message;
        this.delayTimes = Math.toIntExact(executeTime - System.currentTimeMillis());

    }

    /**
     * @param exchange   交换机名称
     * @param routingKey 路由键（队列名称）
     * @param message    信息主体
     * @param delayTimes 延迟消费时间（单位：毫秒）
     */
    public RabbitDelayMqMessage(String exchange, String routingKey, Object message, BigDecimal delayTimes) {
        this.exchange = exchange;
        this.routingKey = routingKey;
        this.body = message;
        this.delayTimes = delayTimes.intValue();
    }
}
